Conversation
WalkthroughThis PR adds a P2P encrypted file-sharing feature using iroh/iroh-blobs (new ChangesP2P File Sharing Feature
Trellis AI Workflow System Bootstrap
Sequence DiagramsequenceDiagram
participant Frontend
participant TauriCmd as share_cmds
participant ShareManager
participant iroh as iroh endpoint
participant RemotePeer
rect rgba(70, 130, 180, 0.5)
note over Frontend, iroh: Send Flow
Frontend->>TauriCmd: share_start_send(id, paths)
TauriCmd->>ShareManager: start_send(id, paths)
ShareManager->>iroh: bind endpoint + build ticket
ShareManager-->>Frontend: SendInfo{ticket, files}
RemotePeer->>iroh: connect with ticket
iroh->>ShareManager: provider request event
ShareManager->>Frontend: emit share:event Connected/Progress/Completed
end
rect rgba(60, 179, 113, 0.5)
note over Frontend, RemotePeer: Receive Flow
Frontend->>TauriCmd: share_start_receive(id, ticket, dest, files)
TauriCmd->>ShareManager: start_receive(id, ticket, dest, files)
ShareManager->>iroh: bind + MemoryLookup seed
iroh->>RemotePeer: download blobs
ShareManager->>Frontend: emit share:event Connected/Progress/Completed
end
Estimated code review effort🎯 5 (Critical) | ⏱️ ~120 minutes Possibly related PRs
Suggested labels
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 inconclusive)
✅ Passed checks (4 passed)
✨ Finishing Touches📝 Generate docstrings
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
13 issues found across 148 files
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name=".agents/skills/trellis-channel/references/workflows.md">
<violation number="1" location=".agents/skills/trellis-channel/references/workflows.md:67">
P2: Workflow example uses unsupported `--tag` flag in `trellis channel messages` command</violation>
</file>
<file name=".agents/skills/trellis-channel/references/command-reference.md">
<violation number="1" location=".agents/skills/trellis-channel/references/command-reference.md:203">
P1: Command reference internally contradicts the event kind produced by `channel interrupt`. The `interrupt` command section claims it appends an `interrupt` event, but the Event Model whitelist (`CHANNEL_EVENT_KINDS`) lists `interrupt_requested` and `interrupted` without `interrupt`, and the `tag-vs-kind` section says the command appends an `interrupt_requested` / `interrupted` pair. Users relying on the `interrupt` command description would be unable to filter with `--kind interrupt` because it is not in the whitelist.</violation>
</file>
<file name=".trellis/scripts/common/developer.py">
<violation number="1" location=".trellis/scripts/common/developer.py:56">
P1: Developer name is used as a raw path segment without sanitization, allowing path traversal (e.g., `../attacker` resolves outside `.trellis/workspace/`).</violation>
</file>
<file name=".agents/skills/trellis-break-loop/SKILL.md">
<violation number="1" location=".agents/skills/trellis-break-loop/SKILL.md:184">
P2: The break-loop skill mandates syncing local specs to `src/templates/markdown/spec/`, but this path does not exist in the repository and conflicts with the local-only `.trellis/spec/` workflow established by the sibling `trellis-update-spec` skill. In an application project (not the Trellis framework repo), this instruction would fail or cause agents to edit non-existent/inappropriate paths.</violation>
</file>
<file name=".trellis/scripts/common/task_utils.py">
<violation number="1" location=".trellis/scripts/common/task_utils.py:60">
P1: archive_task_dir does not guard against archive destination collisions before shutil.move</violation>
</file>
<file name=".trellis/scripts/common/safe_commit.py">
<violation number="1" location=".trellis/scripts/common/safe_commit.py:121">
P1: `safe_trellis_paths_to_add` looks for an archived task at `.trellis/tasks/archive/<task_name>`, but the actual archive layout uses `.trellis/tasks/archive/YYYY-MM/<task_name>`. This path mismatch causes archived tasks to be omitted from the staging list.</violation>
</file>
<file name=".trellis/scripts/common/cli_adapter.py">
<violation number="1" location=".trellis/scripts/common/cli_adapter.py:559">
P2: `supports_cli_agents` is inconsistent with `build_run_command` and `build_resume_command`. It returns `True` for only five platforms, but `build_run_command` has valid CLI branches for `kiro`, `gemini`, and `qoder` (and `build_resume_command` does too). Any upstream code that gates calls via `supports_cli_agents` will incorrectly disable execution for those three platforms.</violation>
</file>
<file name=".agents/skills/trellis-channel/references/progress-debugging.md">
<violation number="1" location=".agents/skills/trellis-channel/references/progress-debugging.md:136">
P1: Stale CLI commands and flags in progress-debugging.md conflict with the current command reference (`wait --tag`, `forum list`, `thread show`, `context --as`).</violation>
</file>
<file name=".trellis/scripts/common/task_store.py">
<violation number="1" location=".trellis/scripts/common/task_store.py:388">
P1: cmd_archive can archive/move any existing directory, not just valid Trellis task directories.</violation>
</file>
<file name=".agents/skills/trellis-session-insight/references/triggering-patterns.md">
<violation number="1" location=".agents/skills/trellis-session-insight/references/triggering-patterns.md:83">
P2: Session-insight trigger guidance references undocumented `trellis mem list --task` flag that conflicts with the skill's own CLI reference.</violation>
</file>
<file name=".agents/skills/trellis-channel/references/workers.md">
<violation number="1" location=".agents/skills/trellis-channel/references/workers.md:159">
P1: `send` example uses non-existent `--tag` flag</violation>
</file>
Reply with feedback, questions, or to request a fix.
Re-trigger cubic
| ```bash | ||
| trellis channel wait T --as main --from check --kind done --timeout 15m | ||
| trellis channel wait T --as main --from check,check-cx --kind done --all --timeout 15m | ||
| trellis channel wait T --as worker --tag interrupt --timeout 1h |
There was a problem hiding this comment.
P1: Stale CLI commands and flags in progress-debugging.md conflict with the current command reference (wait --tag, forum list, thread show, context --as).
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At .agents/skills/trellis-channel/references/progress-debugging.md, line 136:
<comment>Stale CLI commands and flags in progress-debugging.md conflict with the current command reference (`wait --tag`, `forum list`, `thread show`, `context --as`).</comment>
<file context>
@@ -0,0 +1,226 @@
+```bash
+trellis channel wait T --as main --from check --kind done --timeout 15m
+trellis channel wait T --as main --from check,check-cx --kind done --all --timeout 15m
+trellis channel wait T --as worker --tag interrupt --timeout 1h
+trellis channel wait T --as main --thread release-note --action status --timeout 10m
+```
</file context>
|
|
||
| Behavior: | ||
| - Appends an `interrupt` event with `reason: "user"` and a replacement | ||
| instruction body; supervisor performs provider-level interrupt where |
There was a problem hiding this comment.
P1: Command reference internally contradicts the event kind produced by channel interrupt. The interrupt command section claims it appends an interrupt event, but the Event Model whitelist (CHANNEL_EVENT_KINDS) lists interrupt_requested and interrupted without interrupt, and the tag-vs-kind section says the command appends an interrupt_requested / interrupted pair. Users relying on the interrupt command description would be unable to filter with --kind interrupt because it is not in the whitelist.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At .agents/skills/trellis-channel/references/command-reference.md, line 203:
<comment>Command reference internally contradicts the event kind produced by `channel interrupt`. The `interrupt` command section claims it appends an `interrupt` event, but the Event Model whitelist (`CHANNEL_EVENT_KINDS`) lists `interrupt_requested` and `interrupted` without `interrupt`, and the `tag-vs-kind` section says the command appends an `interrupt_requested` / `interrupted` pair. Users relying on the `interrupt` command description would be unable to filter with `--kind interrupt` because it is not in the whitelist.</comment>
<file context>
@@ -0,0 +1,480 @@
+
+Behavior:
+- Appends an `interrupt` event with `reason: "user"` and a replacement
+ instruction body; supervisor performs provider-level interrupt where
+ supported (Claude `/interrupt`, Codex turn cancel).
+- Prints the appended event JSON on stdout.
</file context>
| tasks_dir = get_tasks_dir(repo_root) | ||
|
|
||
| # Resolve task directory (supports task name, relative path, or absolute path) | ||
| task_dir = resolve_task_dir(task_name, repo_root) |
There was a problem hiding this comment.
P1: cmd_archive can archive/move any existing directory, not just valid Trellis task directories.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At .trellis/scripts/common/task_store.py, line 388:
<comment>cmd_archive can archive/move any existing directory, not just valid Trellis task directories.</comment>
<file context>
@@ -0,0 +1,747 @@
+ tasks_dir = get_tasks_dir(repo_root)
+
+ # Resolve task directory (supports task name, relative path, or absolute path)
+ task_dir = resolve_task_dir(task_name, repo_root)
+
+ if not task_dir or not task_dir.is_dir():
</file context>
| repo_root = get_repo_root() | ||
|
|
||
| dev_file = repo_root / DIR_WORKFLOW / FILE_DEVELOPER | ||
| workspace_dir = repo_root / DIR_WORKFLOW / DIR_WORKSPACE / name |
There was a problem hiding this comment.
P1: Developer name is used as a raw path segment without sanitization, allowing path traversal (e.g., ../attacker resolves outside .trellis/workspace/).
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At .trellis/scripts/common/developer.py, line 56:
<comment>Developer name is used as a raw path segment without sanitization, allowing path traversal (e.g., `../attacker` resolves outside `.trellis/workspace/`).</comment>
<file context>
@@ -0,0 +1,190 @@
+ repo_root = get_repo_root()
+
+ dev_file = repo_root / DIR_WORKFLOW / FILE_DEVELOPER
+ workspace_dir = repo_root / DIR_WORKFLOW / DIR_WORKSPACE / name
+
+ # Create .developer file
</file context>
| # Final check: ensure resolved path is not the repo root | ||
| abs_path = repo_root / Path(normalized) | ||
| if abs_path.exists(): | ||
| try: |
There was a problem hiding this comment.
P1: archive_task_dir does not guard against archive destination collisions before shutil.move
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At .trellis/scripts/common/task_utils.py, line 60:
<comment>archive_task_dir does not guard against archive destination collisions before shutil.move</comment>
<file context>
@@ -0,0 +1,274 @@
+ # Final check: ensure resolved path is not the repo root
+ abs_path = repo_root / Path(normalized)
+ if abs_path.exists():
+ try:
+ resolved = abs_path.resolve()
+ root_resolved = repo_root.resolve()
</file context>
| - If it's a code reuse issue → update `code-reuse-thinking-guide.md` | ||
| - If it's domain-specific → update `backend/*.md` or `frontend/*.md` | ||
|
|
||
| 2. **Sync templates** - After updating `.trellis/spec/`, sync to `src/templates/markdown/spec/` |
There was a problem hiding this comment.
P2: The break-loop skill mandates syncing local specs to src/templates/markdown/spec/, but this path does not exist in the repository and conflicts with the local-only .trellis/spec/ workflow established by the sibling trellis-update-spec skill. In an application project (not the Trellis framework repo), this instruction would fail or cause agents to edit non-existent/inappropriate paths.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At .agents/skills/trellis-break-loop/SKILL.md, line 184:
<comment>The break-loop skill mandates syncing local specs to `src/templates/markdown/spec/`, but this path does not exist in the repository and conflicts with the local-only `.trellis/spec/` workflow established by the sibling `trellis-update-spec` skill. In an application project (not the Trellis framework repo), this instruction would fail or cause agents to edit non-existent/inappropriate paths.</comment>
<file context>
@@ -0,0 +1,188 @@
+ - If it's a code reuse issue → update `code-reuse-thinking-guide.md`
+ - If it's domain-specific → update `backend/*.md` or `frontend/*.md`
+
+2. **Sync templates** - After updating `.trellis/spec/`, sync to `src/templates/markdown/spec/`
+
+3. **Commit the spec updates** - This is the primary output, not just the analysis text
</file context>
| - "记一下这次踩的坑" | ||
| - "复盘下这个任务" | ||
|
|
||
| Reach: identify the current task's session id (from `.trellis/.runtime/sessions/*.json` or `mem list --task <task-dir>`), then `extract <id> --phase brainstorm` and `--phase implement`. Present a summary — surface concrete file:line citations where possible. Whether to also write the summary somewhere (PRD, spec, notes file) is the user's call; offer, don't auto-write. |
There was a problem hiding this comment.
P2: Session-insight trigger guidance references undocumented trellis mem list --task flag that conflicts with the skill's own CLI reference.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At .agents/skills/trellis-session-insight/references/triggering-patterns.md, line 83:
<comment>Session-insight trigger guidance references undocumented `trellis mem list --task` flag that conflicts with the skill's own CLI reference.</comment>
<file context>
@@ -0,0 +1,93 @@
+- "记一下这次踩的坑"
+- "复盘下这个任务"
+
+Reach: identify the current task's session id (from `.trellis/.runtime/sessions/*.json` or `mem list --task <task-dir>`), then `extract <id> --phase brainstorm` and `--phase implement`. Present a summary — surface concrete file:line citations where possible. Whether to also write the summary somewhere (PRD, spec, notes file) is the user's call; offer, don't auto-write.
+
+## Anti-patterns: do NOT reach for `mem` here
</file context>
| Reach: identify the current task's session id (from `.trellis/.runtime/sessions/*.json` or `mem list --task <task-dir>`), then `extract <id> --phase brainstorm` and `--phase implement`. Present a summary — surface concrete file:line citations where possible. Whether to also write the summary somewhere (PRD, spec, notes file) is the user's call; offer, don't auto-write. | |
| Reach: identify the current task's session id (from `.trellis/.runtime/sessions/*.json` or `trellis mem list --cwd <project-path>`), then `extract <id> --phase brainstorm` and `--phase implement`. Present a summary — surface concrete file:line citations where possible. Whether to also write the summary somewhere (PRD, spec, notes file) is the user's call; offer, don't auto-write. |
| Claude Code, OpenCode, iFlow, and Codex support CLI agent execution. | ||
| Cursor is IDE-only and doesn't support CLI agents. | ||
| """ | ||
| return self.platform in ("claude", "opencode", "iflow", "codex", "pi") |
There was a problem hiding this comment.
P2: supports_cli_agents is inconsistent with build_run_command and build_resume_command. It returns True for only five platforms, but build_run_command has valid CLI branches for kiro, gemini, and qoder (and build_resume_command does too). Any upstream code that gates calls via supports_cli_agents will incorrectly disable execution for those three platforms.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At .trellis/scripts/common/cli_adapter.py, line 559:
<comment>`supports_cli_agents` is inconsistent with `build_run_command` and `build_resume_command`. It returns `True` for only five platforms, but `build_run_command` has valid CLI branches for `kiro`, `gemini`, and `qoder` (and `build_resume_command` does too). Any upstream code that gates calls via `supports_cli_agents` will incorrectly disable execution for those three platforms.</comment>
<file context>
@@ -0,0 +1,851 @@
+ Claude Code, OpenCode, iFlow, and Codex support CLI agent execution.
+ Cursor is IDE-only and doesn't support CLI agents.
+ """
+ return self.platform in ("claude", "opencode", "iflow", "codex", "pi")
+
+ @property
</file context>
| return self.platform in ("claude", "opencode", "iflow", "codex", "pi") | |
| return self.platform in ("claude", "opencode", "iflow", "codex", "kiro", "gemini", "qoder", "pi") |
There was a problem hiding this comment.
Actionable comments posted: 47
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
.trellis/.gitignore (1)
13-33: 🔒 Security & Privacy | 🟠 Major | ⚡ Quick winIgnore
hooks.local.jsonas documented.
linear_sync.pytreats.trellis/hooks.local.jsonas local gitignored config, but this ignore file never excludes it. That makes team/project mappings easy to commit accidentally.Possible fix
# Agent runtime files .agents/ .agent-log .session-id +hooks.local.json🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In @.trellis/.gitignore around lines 13 - 33, The .gitignore entry for local Trellis config is missing hooks.local.json, so add an ignore rule for that file alongside the existing agent/task runtime ignores. Update the .trellis/.gitignore contents to exclude hooks.local.json as documented, keeping the change near the current local config/runtime patterns so it’s easy to find. Use the existing local config section around .agents/, .agent-log, and .session-id as the anchor for the new ignore rule.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.agents/skills/trellis-break-loop/SKILL.md:
- Around line 179-185: The guide reference in the SKILL.md decision list points
to cross-platform-thinking-guide.md, but that file is missing from
.trellis/spec/guides/. Update the reference to the correct existing guide name
in the relevant section, or add the missing guide file if that is the intended
target, and keep the sync step to src/templates/markdown/spec/ aligned with the
change. Refer to the SKILL.md guide-selection rules and the sync templates
instruction when making the fix.
- Line 184: The sync target path referenced in the skill is incorrect because
src/templates/markdown/spec/ does not exist here. Update the “Sync templates”
guidance to point to the actual template output directory used by the project,
or add the missing destination if that is the intended target. Make sure the
instruction in SKILL.md matches the real path so the sync step references the
correct location.
In @.agents/skills/trellis-channel/references/command-reference.md:
- Line 136: The `wait` and `messages` examples in the command reference still
mention a `--tag` filter, but the authoritative tag-vs-kind section says that
flag does not exist in the v0.6.0 channel CLI. Update the documentation around
the `wait` and `messages` command descriptions to either remove `--tag` entirely
or replace it with the correct supported filter, and make sure the `wait`,
`messages`, and tag-vs-kind sections all use the same terminology.
In @.agents/skills/trellis-channel/references/progress-debugging.md:
- Around line 149-153: The messages filter description includes an unsupported
--tag flag, which conflicts with the authoritative command reference. Update the
`messages` section in `progress-debugging.md` to remove `--tag` from the listed
filters and keep only the flags that are actually documented elsewhere,
preserving consistency with `command-reference.md`.
- Line 136: The `trellis channel wait` example in the progress debugging guide
is using an invalid `--tag` flag; update that example to use the event kind
model instead. Edit the `wait` command example so it matches the CLI documented
by `command-reference.md`, replacing `--tag interrupt` with `--kind interrupt`
in the `trellis channel wait` reference.
In @.agents/skills/trellis-channel/references/workers.md:
- Around line 154-161: The `trellis channel send` example in `workers.md` is
using an invalid `--tag question` flag that does not exist on the `send`
command. Update the example near the low-priority hint guidance to remove the
flag or reword it so the “question” label is conveyed in the message body
instead, and keep the example aligned with the `send` behavior described by
`command-reference.md` and the `send` command usage.
In @.agents/skills/trellis-meta/references/customize-local/change-workflow.md:
- Line 27: The workflow-state documentation needs to warn more clearly that
mismatched STATUS tags are silently dropped and add a simple verification step.
Update the guidance around the [workflow-state:STATUS] block in
change-workflow.md to explicitly call out that
[workflow-state:foo]…[/workflow-state:bar] mistakes remove the whole block
without warning, and recommend a quick validation or check after editing. Keep
the note tied to the existing workflow-state parser-only behavior so users know
to verify the exact opening and closing tag names.
In @.agents/skills/trellis-meta/references/local-architecture/bundled-skills.md:
- Line 19: The bundled skills heading still shows an outdated Trellis version,
so update the version text in the bundled skills document to match the current
release. Check the heading that currently says "Current Bundled Skills (v0.6.0)"
and change it to the correct Trellis version used by this bootstrap, or rename
it to clearly indicate it is an API version if that is what it represents.
In
@.agents/skills/trellis-meta/references/local-architecture/context-injection.md:
- Line 50: The document uses the undefined term “seed rows,” so update the
guidance in context-injection.md to use clearer wording tied to the JSONL
structure. Refer to the description around the reader behavior and explain that
rows without a file field should be skipped, while only spec/research files
should be included when configuring JSONL, so readers can understand exactly
which entries are meant without relying on an undefined term.
In
@.agents/skills/trellis-meta/references/local-architecture/multi-agent-channel.md:
- Around line 49-52: The markdown table in the multi-agent channel reference has
a malformed row where the “Override worker guard per spawn” entry includes both
the CLI flags and the environment variable fallback in one row, but the table
only has two columns. Update that section by either splitting the environment
variable fallback into its own row or adding a third header column, and keep the
`channel.worker_guard` / `trellis channel spawn` guidance aligned with the
existing table structure so markdown parsers render it correctly.
In @.agents/skills/trellis-spec-bootstrap/references/spec-writing.md:
- Around line 66-68: The placeholder check command in the spec-writing reference
uses grep alternation syntax that is not portable across GNU and BSD/macOS grep.
Update the command in the spec-writing guidance to use extended regex with grep
-E (for example, in the placeholder search under the placeholder check section)
so the pattern works consistently across environments.
In @.github/workflows/release.yml:
- Around line 42-43: The release workflow is using mutable action tags instead
of immutable SHAs. Update the action references in all three jobs so
`setup-gradle` in the `Cache Gradle dependencies` step uses
`gradle/actions/setup-gradle@ed408507eac070d1f99cc633dbcf757c94c7933a`, and
replace every `Swatinem/rust-cache@v2` usage with
`Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32`; use the existing
job and step names in `.github/workflows/release.yml` to locate each occurrence.
In @.trellis/scripts/add_session.py:
- Around line 518-523: The content loading flow in add_session.py currently
ignores a missing args.content_file path and falls back to the default session
text, so update the args.content_file handling to validate the Path before
reading and raise an explicit error or exit non-zero when content_path.is_file()
is false. Keep the fix scoped to the existing content_path / extra_content logic
in the content file and stdin branch so callers do not silently lose intended
notes.
- Around line 290-309: The history migration in add_session.py only updates the
table header and leaves legacy 4- or 6-column session rows untouched, so older
index.md files can end up with a malformed table after the first append. Update
the rewrite path in the in_session_history block to normalize existing body rows
to the new 5-column Branch-only shape as well, using the same session history
processing that already handles header detection and header_written.
In @.trellis/scripts/common/active_task.py:
- Around line 122-135: resolve_task_ref currently accepts absolute paths
verbatim, which lets active task refs escape the Trellis task store; update this
in active_task.py so only refs under DIR_WORKFLOW/DIR_TASKS are accepted. In
resolve_task_ref, validate the normalized path before returning it, reject
absolute paths and any path that does not resolve inside repo_root /
DIR_WORKFLOW / DIR_TASKS, and keep _canonical_task_ref() from persisting
out-of-store locations. Use the existing symbols resolve_task_ref,
normalize_task_ref, DIR_WORKFLOW, and DIR_TASKS to implement the guard
consistently.
- Around line 470-497: The fallback in resolve_active_task is too broad: when
resolve_context_key() returns a known context key but that context has no
current_task, it should not call _resolve_single_session_fallback(). Update
resolve_active_task so the session-fallback path is only used when no context
key is known at all; if a known context is missing/empty, return
ActiveTask(None, "none", context_key) directly. Use resolve_active_task,
resolve_context_key, and _resolve_single_session_fallback to locate the logic.
In @.trellis/scripts/common/cli_adapter.py:
- Around line 163-232: Keep Trellis command path generation aligned across
platforms by updating get_commands_path() to use the same canonical locations as
get_trellis_command_path() for codex, kiro, and gemini. Right now
get_commands_path() still routes through platform-specific command
directories/files that no longer match the Trellis helper, so adjust the
platform branches in cli_adapter.py to return the corresponding skills/prompt
locations and naming conventions used by get_trellis_command_path(). Make sure
the shared path logic stays consistent for both writing and lookup across these
symbols.
In @.trellis/scripts/common/config.py:
- Around line 271-289: The get_packages() helper is filtering out scalar package
declarations, so shorthand entries like packages: {frontend: src} get lost and
later package resolution breaks. Update get_packages() in config.py to preserve
scalar values alongside dict values instead of discarding them, so
get_package_path() can continue handling both forms; keep the existing
normalization around config.get("packages") and return None only when packages
is absent or empty.
In @.trellis/scripts/common/developer.py:
- Around line 55-67: Make the developer initialization atomic in
init_developer() by ensuring the .developer marker is only created after the
workspace, journal, and index setup succeeds. Update the flow around
dev_file.write_text and the later workspace/journal/index creation steps so a
failure does not leave a stale marker behind; either write .developer last or
delete it in a rollback path if any earlier step fails. Use the existing
init_developer() and dev_file handling to place the fix consistently across the
affected initialization sections.
- Around line 48-57: Reject unsafe developer names before any path is built:
`name` is currently concatenated into `workspace_dir` in
`.trellis/scripts/common/developer.py`, so values like `../`, nested paths, or
absolute paths can escape `.trellis/workspace`. Add validation in the developer
creation flow (the function that builds `dev_file` and `workspace_dir`) to allow
only a safe slug format and reject anything else, and apply the same check to
the related code paths mentioned in the comment so `mkdir()` and `write_text()`
never receive an unsafe `name`.
In @.trellis/scripts/common/git_context.py:
- Around line 51-63: The `--json` flag is not honored in the `phase` path, so
callers get plain text from the `main`/`parse` flow even though the CLI docs say
it works with any mode. Update the `phase` branch in the git context script to
either serialize the extracted phase data as JSON when `args.json` is set, or
explicitly reject `--json` for `--mode phase` with a clear error; use the
existing `--json`, `--mode`, and `phase` handling in `main`/argument parsing to
locate the fix.
In @.trellis/scripts/common/io.py:
- Around line 25-37: The shared JSON writer should handle parent-directory setup
instead of relying on callers like common.active_task._write_json. Update
write_json() in common.io to ensure the target path’s parent directory exists
before calling Path.write_text, so first writes to new subtrees succeed
consistently. Keep the fix localized to write_json() and preserve its existing
success/failure behavior.
- Around line 14-22: `read_json()` currently returns whatever `json.loads()`
parses, which can violate its declared `dict | None` contract. Update the
`read_json` helper to validate the parsed value is a dictionary before returning
it, and otherwise return `None`; keep the existing exception handling for
unreadable or invalid files. Use the `read_json` function in
`.trellis/scripts/common/io.py` as the place to enforce this object-only
behavior so callers can safely rely on `.get(...)` and key access.
In @.trellis/scripts/common/paths.py:
- Around line 43-62: The fallback in get_repo_root currently ignores an explicit
start_path and always returns Path.cwd(), which can resolve the wrong repository
when probing from another directory. Update get_repo_root so the final fallback
preserves the originally searched path (the resolved start_path/current value)
instead of the process working directory, while keeping the DIR_WORKFLOW
directory check and traversal logic unchanged.
In @.trellis/scripts/common/safe_commit.py:
- Around line 176-187: The narrow-scope path in safe_commit.py is still staging
the entire archive tree instead of only the targeted task archive. Update the
task_name branch in the path-building logic so it appends the specific archive
subdirectory for that task (not DIR_ARCHIVE itself), while keeping
modified_children limited to their exact paths. Use the existing task_name,
archive_dir, and paths handling in safe_commit.py to locate and fix the staging
behavior.
In @.trellis/scripts/common/task_context.py:
- Around line 50-60: The path handling in task_context.py currently allows
absolute paths and `..` traversal to flow through into the JSONL manifest, which
can let non-repo files be recorded and later loaded by sub-agents. Update the
validation around the path normalization logic in the task context builder to
reject absolute paths and any path that escapes the repository root before
computing `full_path`, and ensure the manifest-writing code that persists
entries only stores repo-relative paths. Use the existing task context flow
around `jsonl_file`, `full_path`, and the JSONL entry creation/persistence to
keep all context manifests confined to repository content.
In @.trellis/scripts/common/task_store.py:
- Around line 254-292: The create flow in task_store.py currently only warns
when task_dir already exists, but still rebuilds task_data and calls write_json,
which overwrites the existing task.json. Update the task creation path so that
an existing task directory is left untouched, using the existing task_dir/slug
handling in the create logic and write_json call as the guard point. If the
directory already exists, return early or skip serialization so status, branch,
notes, and link fields are preserved.
- Around line 635-647: The unlink logic in task_store.py is clearing the child’s
parent unconditionally, which can orphan a task when remove-subtask is called
with the wrong parent. In the unlink flow around the parent/child update and
write_json calls, first verify that the child’s recorded parent matches the
requested parent before mutating either task; use the existing parent_data,
child_data, and child_dir_name values to guard the removal. If the recorded
parent does not match args.parent_dir, abort without changing children or parent
fields so the wrong pair is not unlinked.
In @.trellis/scripts/common/task_utils.py:
- Around line 232-249: The hook execution in get_hooks/task_utils.py is unsafe
because hook strings are run through subprocess.run with shell=True while
TASK_JSON_PATH comes from task-derived input. Update the hook execution path to
avoid shell interpolation by switching to an argv-based hook format in the
get_hooks/cmd handling, or otherwise provide a safely pre-quoted variable and
ensure the raw path is not intended for direct expansion. If you keep
shell-based hooks, document the safe variable name and make the existing
TASK_JSON_PATH usage non-interpolated by default.
- Around line 76-99: The suffix lookup in find_task_by_name can return an
arbitrary match from tasks_dir.iterdir(), so ambiguous shorthand names may
resolve to the wrong task. Update find_task_by_name to reject or explicitly
handle multiple directories ending with the same task_name suffix by collecting
all matches, returning only a single unambiguous result, and otherwise returning
None or signaling ambiguity; keep the exact-match path behavior unchanged.
- Around line 27-69: is_safe_task_path currently only blocks repo-root paths, so
repo-relative non-task directories can still be treated as safe. Update the
validation in task_utils.is_safe_task_path to anchor allowed paths under the
.trellis/tasks tree by rejecting any path that resolves outside that directory,
while keeping the existing absolute-path and traversal checks. Use the existing
repo_root/abs_path/resolved logic to compare against the resolved .trellis/tasks
base and ensure callers cannot operate on .git, .trellis/spec, or other non-task
paths.
In @.trellis/scripts/common/trellis_config.py:
- Around line 73-75: The list-item parsing in trellis_config.py currently
appends raw `_unquote(...)` values for entries handled by the
`stripped.startswith("- ")` branch, so inline comments are preserved there
unlike scalar values. Update that list-item path to apply
`_strip_inline_comment()` before `_unquote()`, using the existing helpers in the
same parser logic so list entries like `- foo # note` are normalized
consistently with mapping values.
In @.trellis/scripts/hooks/linear_sync.py:
- Around line 90-104: The _linearis helper currently calls subprocess.run
without guarding launcher failures or hangs, so task lifecycle commands can
stall or crash; update _linearis to handle missing/execution errors and add a
timeout around the linearis invocation. Keep the existing stderr reporting and
exit behavior in the nonzero return path, but make sure subprocess-related
exceptions are caught and treated as a warning/degraded failure so task.py
create/start/archive can continue safely.
In @.trellis/scripts/task.py:
- Around line 212-251: The _print_task() traversal is incorrectly skipping
entire subtrees when a parent fails the --mine or --status filters, so matching
children never get visited. Update the filtering in _print_task() so it only
suppresses printing the current node, but still always recurses into children in
the loop over t.children. Use _print_task, filter_mine, filter_status, and
children_progress to keep the traversal intact while applying filters only at
display time.
In @.trellis/spec/frontend/directory-structure.md:
- Around line 25-30: The placeholder directory tree block in the markdown spec
needs a fenced code block language tag to satisfy markdownlint MD040. Update the
directory structure example in the spec so the fenced block uses a specifier
such as text or tree, keeping the existing placeholder content intact.
In @.trellis/spec/guides/cross-layer-thinking-guide.md:
- Line 25: The fenced diagram block in the cross-layer thinking guide is missing
a language specifier, so update the Markdown fence used for the ASCII diagram to
declare text for consistent parsing. Locate the diagram block in the guide and
adjust the fence syntax accordingly without changing the diagram content.
- Line 306: The fenced ASCII diagram in the cross-layer thinking guide is
missing a language specifier, so update the markdown fence used for that diagram
to identify it as text. Locate the diagram block around the referenced section
and ensure the fence is labeled with text for consistent Markdown parsing.
- Around line 223-287: Remove the accidentally duplicated guidance blocks from
the guide so each checklist appears only once. Delete the repeated
“Cross-Platform Template Consistency”, “Generated Runtime Template Upgrade
Consistency”, and “Mode-Detection Probe Checklist” sections in the later portion
of the document, keeping the original versions earlier in the file. Use the
section headings and checklist text to locate the duplicates precisely.
In @.trellis/workspace/index.md:
- Around line 13-22: The tree diagram in index.md is shown as a code block but
is missing its language specifier; update the markdown fence for the workspace
structure snippet to use the text language tag so it renders consistently. Make
this change in the index.md content near the workspace directory tree, keeping
the existing diagram and formatting unchanged aside from adding the specifier.
- Around line 40-60: The markdown in the “For Returning Developers” section has
fenced code blocks that are missing surrounding blank lines, triggering MD031
warnings. Update the affected fenced blocks in the workspace index so each
`bash` code fence in that section is preceded and followed by a blank line,
keeping the existing content and structure intact.
In `@package.json`:
- Line 63: The dependency declaration for `@types/node` is out of sync with the
supported runtime floor, since it tracks Node 26 APIs while engines.node still
allows Node 22. Update package.json so the typings line matches the Node 22
runtime support, or, if the project is intentionally moving forward, raise
engines.node and any matching CI/runtime checks to 26 so the types and runtime
stay aligned.
In `@scripts/android-env.mjs`:
- Around line 7-14: The sccache detection in findSccache is Unix-only because it
shells out to which, so Windows installs are missed and RUSTC_WRAPPER can remain
unset. Update findSccache to use a platform-aware lookup path: on win32, probe
with where.exe or scan PATH in Node, while keeping the existing
process.env.RUSTC_WRAPPER fallback. Also adjust the warning/hint text around the
sccache lookup to stay generic instead of assuming brew, and apply the same
platform-aware change wherever this lookup is duplicated.
In `@src-tauri/risuko-share/src/lib.rs`:
- Line 438: The receive completion cleanup is using the wrong collection: the
task path around the receive handler logic removes from the send-side active map
instead of the receive-side self.receives, leaving stale receive handles behind.
Update the completion/failure/terminal cleanup in the receive flow (the code
that uses the active clone) to remove entries from self.receives using the
receive id, and ensure the recv-{id} directory is deleted on every terminal path
in the same receive-processing code.
- Around line 503-519: The receive flow is still buffering blobs in memory and
leaving completed receive handles behind, so update the receive task to use the
on-disk blob directory instead of MemStore by loading a Store from
FsStore::load(blobs_dir) in the receive path. Also ensure the entry tracked in
self.receives is removed when the receive task finishes normally, not only from
cancel, so completed receives are cleaned up automatically; use the existing
receive task/handle logic around the store setup and task exit to make this
change.
In `@src-tauri/src/commands/android_intent.rs`:
- Around line 72-98: The one-time setup in init_ndk_context is still race-prone
because two ensure_ndk_context callers can both enter before NDK_CONTEXT_READY
is set, causing a spurious "ANDROID_APP already set" error. Serialize the entire
initialization path in init_ndk_context with a mutex or other one-time fallible
guard, and keep the existing JAVA_VM, ANDROID_APP, and NDK_CONTEXT_READY
checks/sets inside that protected section so only one thread can perform the
attach_current_thread and initialize_android_context flow.
In `@src/renderer/components/Share/Index.vue`:
- Around line 41-44: The Motion props are being passed function references
instead of the config objects they return. Update the usages of panelAnimate and
panelTransition in Share/Index.vue so Motion receives the result of calling
those helpers, and make sure the same fix is applied at both the template
bindings and any other call sites that currently pass them through unchanged.
In `@src/renderer/pages/index/main.ts`:
- Around line 206-207: The share-link parsing in main.ts should guard against
malformed percent-encoding before decoding so a bad URL does not abort
initialization. Update the logic around rawId and shareId to catch
decodeURIComponent failures in the existing error-handling path used by the
deep-link flow, and skip invalid risuko://share/ links so onOpenUrl registration
still completes.
---
Outside diff comments:
In @.trellis/.gitignore:
- Around line 13-33: The .gitignore entry for local Trellis config is missing
hooks.local.json, so add an ignore rule for that file alongside the existing
agent/task runtime ignores. Update the .trellis/.gitignore contents to exclude
hooks.local.json as documented, keeping the change near the current local
config/runtime patterns so it’s easy to find. Use the existing local config
section around .agents/, .agent-log, and .session-id as the anchor for the new
ignore rule.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: ca6d9e9b-6487-45c0-985b-dc5b03d3658d
⛔ Files ignored due to path filters (5)
pnpm-lock.yamlis excluded by!**/pnpm-lock.yamlsrc-tauri/Cargo.lockis excluded by!**/*.locksrc-tauri/gen/android/app/src/main/AndroidManifest.xmlis excluded by!**/gen/**src-tauri/gen/android/app/src/main/java/app/risuko/mobile/MainActivity.ktis excluded by!**/gen/**src-tauri/gen/android/gradle.propertiesis excluded by!**/gen/**
📒 Files selected for processing (143)
.agents/skills/trellis-before-dev/SKILL.md.agents/skills/trellis-brainstorm/SKILL.md.agents/skills/trellis-break-loop/SKILL.md.agents/skills/trellis-channel/SKILL.md.agents/skills/trellis-channel/references/command-reference.md.agents/skills/trellis-channel/references/forum.md.agents/skills/trellis-channel/references/progress-debugging.md.agents/skills/trellis-channel/references/workers.md.agents/skills/trellis-channel/references/workflows.md.agents/skills/trellis-check/SKILL.md.agents/skills/trellis-meta/SKILL.md.agents/skills/trellis-meta/references/customize-local/add-project-local-conventions.md.agents/skills/trellis-meta/references/customize-local/change-agents.md.agents/skills/trellis-meta/references/customize-local/change-context-loading.md.agents/skills/trellis-meta/references/customize-local/change-hooks.md.agents/skills/trellis-meta/references/customize-local/change-skills-or-commands.md.agents/skills/trellis-meta/references/customize-local/change-spec-structure.md.agents/skills/trellis-meta/references/customize-local/change-task-lifecycle.md.agents/skills/trellis-meta/references/customize-local/change-workflow.md.agents/skills/trellis-meta/references/customize-local/overview.md.agents/skills/trellis-meta/references/local-architecture/bundled-skills.md.agents/skills/trellis-meta/references/local-architecture/context-injection.md.agents/skills/trellis-meta/references/local-architecture/generated-files.md.agents/skills/trellis-meta/references/local-architecture/multi-agent-channel.md.agents/skills/trellis-meta/references/local-architecture/overview.md.agents/skills/trellis-meta/references/local-architecture/spec-system.md.agents/skills/trellis-meta/references/local-architecture/task-system.md.agents/skills/trellis-meta/references/local-architecture/workflow.md.agents/skills/trellis-meta/references/local-architecture/workspace-memory.md.agents/skills/trellis-meta/references/platform-files/agents.md.agents/skills/trellis-meta/references/platform-files/hooks-and-settings.md.agents/skills/trellis-meta/references/platform-files/overview.md.agents/skills/trellis-meta/references/platform-files/platform-map.md.agents/skills/trellis-meta/references/platform-files/skills-and-commands.md.agents/skills/trellis-session-insight/SKILL.md.agents/skills/trellis-session-insight/references/cli-quick-reference.md.agents/skills/trellis-session-insight/references/triggering-patterns.md.agents/skills/trellis-spec-bootstrap/SKILL.md.agents/skills/trellis-spec-bootstrap/references/mcp-setup.md.agents/skills/trellis-spec-bootstrap/references/repository-analysis.md.agents/skills/trellis-spec-bootstrap/references/spec-task-planning.md.agents/skills/trellis-spec-bootstrap/references/spec-writing.md.agents/skills/trellis-update-spec/SKILL.md.agents/workflows/continue.md.agents/workflows/finish-work.md.agents/workflows/start.md.github/workflows/release.yml.trellis/.gitignore.trellis/.template-hashes.json.trellis/.version.trellis/agents/check.md.trellis/agents/implement.md.trellis/config.yaml.trellis/scripts/__init__.py.trellis/scripts/add_session.py.trellis/scripts/common/__init__.py.trellis/scripts/common/active_task.py.trellis/scripts/common/cli_adapter.py.trellis/scripts/common/config.py.trellis/scripts/common/developer.py.trellis/scripts/common/git.py.trellis/scripts/common/git_context.py.trellis/scripts/common/io.py.trellis/scripts/common/log.py.trellis/scripts/common/packages_context.py.trellis/scripts/common/paths.py.trellis/scripts/common/safe_commit.py.trellis/scripts/common/session_context.py.trellis/scripts/common/task_context.py.trellis/scripts/common/task_queue.py.trellis/scripts/common/task_store.py.trellis/scripts/common/task_utils.py.trellis/scripts/common/tasks.py.trellis/scripts/common/trellis_config.py.trellis/scripts/common/types.py.trellis/scripts/common/workflow_phase.py.trellis/scripts/get_context.py.trellis/scripts/get_developer.py.trellis/scripts/hooks/linear_sync.py.trellis/scripts/init_developer.py.trellis/scripts/task.py.trellis/spec/frontend/component-guidelines.md.trellis/spec/frontend/directory-structure.md.trellis/spec/frontend/hook-guidelines.md.trellis/spec/frontend/index.md.trellis/spec/frontend/quality-guidelines.md.trellis/spec/frontend/state-management.md.trellis/spec/frontend/type-safety.md.trellis/spec/guides/code-reuse-thinking-guide.md.trellis/spec/guides/cross-layer-thinking-guide.md.trellis/spec/guides/index.md.trellis/tasks/00-bootstrap-guidelines/prd.md.trellis/tasks/00-bootstrap-guidelines/task.json.trellis/workflow.md.trellis/workspace/YueMiyuki/index.md.trellis/workspace/YueMiyuki/journal-1.md.trellis/workspace/index.mdAGENTS.mdbiome.jsonpackage.jsonscripts/android-env.mjsscripts/android-gradle.propertiesscripts/patch-android-gradle.mjsscripts/sign-android-apks.mjssrc-tauri/Cargo.tomlsrc-tauri/capabilities/default.jsonsrc-tauri/capabilities/mobile.jsonsrc-tauri/risuko-cookies/src/browser/chromium.rssrc-tauri/risuko-cookies/src/browser/firefox.rssrc-tauri/risuko-cookies/src/browser/safari.rssrc-tauri/risuko-cookies/src/utils/paths.rssrc-tauri/risuko-engine/src/engine/gnutella/gwcache.rssrc-tauri/risuko-engine/src/engine/http.rssrc-tauri/risuko-engine/src/engine/manager.rssrc-tauri/risuko-engine/src/engine/rss/rule_engine.rssrc-tauri/risuko-share/Cargo.tomlsrc-tauri/risuko-share/src/lib.rssrc-tauri/src/commands/android_intent.rssrc-tauri/src/commands/file_cmds.rssrc-tauri/src/commands/mod.rssrc-tauri/src/commands/share_cmds.rssrc-tauri/src/lib.rssrc/renderer/components/Aside/Index.vuesrc/renderer/components/Main.vuesrc/renderer/components/Native/SelectDirectory.vuesrc/renderer/components/Preference/Sync.vuesrc/renderer/components/Share/Index.vuesrc/renderer/pages/index/main.tssrc/renderer/router/index.tssrc/renderer/store/share.tssrc/renderer/store/sync.tssrc/renderer/styles/android.csssrc/renderer/utils/native.tssrc/shared/locales/en-US/app.tssrc/shared/locales/en-US/index.tssrc/shared/locales/en-US/share.tssrc/shared/locales/zh-CN/app.tssrc/shared/locales/zh-CN/index.tssrc/shared/locales/zh-CN/share.tssrc/shared/locales/zh-TW/app.tssrc/shared/locales/zh-TW/index.tssrc/shared/locales/zh-TW/share.tssrc/shared/utils/index.ts
| - If it's a cross-platform issue → update `cross-platform-thinking-guide.md` | ||
| - If it's a cross-layer issue → update `cross-layer-thinking-guide.md` | ||
| - If it's a code reuse issue → update `code-reuse-thinking-guide.md` | ||
| - If it's domain-specific → update `backend/*.md` or `frontend/*.md` | ||
|
|
||
| 2. **Sync templates** - After updating `.trellis/spec/`, sync to `src/templates/markdown/spec/` | ||
|
|
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Check for referenced thinking guides
find .trellis/spec/guides -name "*thinking-guide*" -type f 2>/dev/null | sort
ls -la .trellis/spec/guides/ 2>/dev/null || echo "Directory not found or empty"Repository: YueMiyuki/Risuko
Length of output: 587
🏁 Script executed:
#!/bin/bash
set -euo pipefail
printf 'Referenced guide filenames:\n'
rg -n --no-heading 'cross-platform-thinking-guide\.md|cross-layer-thinking-guide\.md|code-reuse-thinking-guide\.md' .agents/skills/trellis-break-loop/SKILL.md
printf '\nSearch for actual files in the repo:\n'
fd -a -t f 'cross-platform-thinking-guide.md' . || true
fd -a -t f 'cross-layer-thinking-guide.md' . || true
fd -a -t f 'code-reuse-thinking-guide.md' . || true
printf '\nGuide directory listing:\n'
find .trellis/spec/guides -maxdepth 1 -type f | sortRepository: YueMiyuki/Risuko
Length of output: 615
Fix the missing guide reference
cross-platform-thinking-guide.md is not present in .trellis/spec/guides/; update the reference or add the file.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In @.agents/skills/trellis-break-loop/SKILL.md around lines 179 - 185, The guide
reference in the SKILL.md decision list points to
cross-platform-thinking-guide.md, but that file is missing from
.trellis/spec/guides/. Update the reference to the correct existing guide name
in the relevant section, or add the missing guide file if that is the intended
target, and keep the sync step to src/templates/markdown/spec/ aligned with the
change. Refer to the SKILL.md guide-selection rules and the sync templates
instruction when making the fix.
| - If it's a code reuse issue → update `code-reuse-thinking-guide.md` | ||
| - If it's domain-specific → update `backend/*.md` or `frontend/*.md` | ||
|
|
||
| 2. **Sync templates** - After updating `.trellis/spec/`, sync to `src/templates/markdown/spec/` |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Check template sync destination
test -d src/templates/markdown/spec && find src/templates/markdown/spec -type f | head -10 || echo "src/templates/markdown/spec/ NOT FOUND"Repository: YueMiyuki/Risuko
Length of output: 193
Update the sync target path src/templates/markdown/spec/ doesn't exist in this repo, so the skill points at a dead destination. Point it at the actual template output directory or create the missing path.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In @.agents/skills/trellis-break-loop/SKILL.md at line 184, The sync target path
referenced in the skill is incorrect because src/templates/markdown/spec/ does
not exist here. Update the “Sync templates” guidance to point to the actual
template output directory used by the project, or add the missing destination if
that is the intended target. Make sure the instruction in SKILL.md matches the
real path so the sync step references the correct location.
| ``` | ||
|
|
||
| Behavior: | ||
| - Streams matching events as JSON, one per line. |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
Remove or correct the --tag flag reference.
Line 136 shows --tag interrupt in a wait example, but the tag-vs-kind section (lines 146-179) explicitly states there is no --tag flag anywhere in the v0.6.0 channel CLI. This contradicts the messages filter description at line 152 which also lists --tag. Verify whether --tag exists in wait and messages or remove these references to align with the authoritative tag-vs-kind documentation.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In @.agents/skills/trellis-channel/references/command-reference.md at line 136,
The `wait` and `messages` examples in the command reference still mention a
`--tag` filter, but the authoritative tag-vs-kind section says that flag does
not exist in the v0.6.0 channel CLI. Update the documentation around the `wait`
and `messages` command descriptions to either remove `--tag` entirely or replace
it with the correct supported filter, and make sure the `wait`, `messages`, and
tag-vs-kind sections all use the same terminology.
| ```bash | ||
| trellis channel wait T --as main --from check --kind done --timeout 15m | ||
| trellis channel wait T --as main --from check,check-cx --kind done --all --timeout 15m | ||
| trellis channel wait T --as worker --tag interrupt --timeout 1h |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
Remove --tag from wait example.
This example uses --tag interrupt, but command-reference.md explicitly states there is no --tag flag in the v0.6.0 channel CLI. Use --kind interrupt instead to align with the event kind model.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In @.agents/skills/trellis-channel/references/progress-debugging.md at line 136,
The `trellis channel wait` example in the progress debugging guide is using an
invalid `--tag` flag; update that example to use the event kind model instead.
Edit the `wait` command example so it matches the CLI documented by
`command-reference.md`, replacing `--tag interrupt` with `--kind interrupt` in
the `trellis channel wait` reference.
| Why subcommands first: | ||
|
|
||
| - `messages` already replays the file with filters (`--kind`, `--from`, | ||
| `--last`, `--tag`, `--thread`, `--action`) and gives you `--raw` for the | ||
| exact JSON. Anything you would write a one-liner for, `messages` already |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
Remove --tag from messages filter description.
The messages filter list includes --tag, which contradicts the authoritative documentation in command-reference.md stating there is no --tag flag. Remove --tag from this list to maintain cross-file consistency.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In @.agents/skills/trellis-channel/references/progress-debugging.md around lines
149 - 153, The messages filter description includes an unsupported --tag flag,
which conflicts with the authoritative command reference. Update the `messages`
section in `progress-debugging.md` to remove `--tag` from the listed filters and
keep only the flags that are actually documented elsewhere, preserving
consistency with `command-reference.md`.
Summary by cubic
Integrates the Trellis v0.6.5 local workflow system with tasks/specs, session journaling, multi‑agent channels, and bundled skills. Tightens CI with cached Gradle/Rust (pinned actions) and streamlines Android debug builds with auto‑signing.
New Features
.trellis/runtime: config, scripts (get_context.py,task.py,add_session.py), hooks, session journal/workspace memory, safe git staging; versioned via.trellis/.version, tracked by.trellis/.template-hashes.json, and ignored via.trellis/.gitignore..trellis/workflow.md, bootstrap task, and.agents/workflows/{start,continue,finish-work}.md.trellis mem), deep bug analysis, and channel runtime docs (command reference, workers, forum channels, progress debugging); plus Trellis meta customization guides..trellis/agents/implement.mdand.trellis/agents/check.md.gradle/actions/setup-gradleandSwatinem/rust-cache(actions pinned); Android scripts addandroid:sign:debugandandroid:build:debug:unsignedand auto‑sign inandroid:build:debug; bumpedbiomeschema; addedAGENTS.md.Migration
python3 ./.trellis/scripts/init_developer.py <name>.python3 ./.trellis/scripts/get_context.py(or use theStart Sessionworkflow in.agents/workflows/start.md)..trellis/hooks.local.jsonand installing/configuringlinearis; the hook is in.trellis/scripts/hooks/linear_sync.py.Written for commit d0c0837. Summary will update on new commits.